[英]How can add JTable in JSplitPane?
Hii i am doing a project in swing . 我正在做一个摇摆的项目。 i want to display my data in JTable from database.I
我想从数据库中显示我在JTable中的数据.I
created JSplitpane. 创造了JSplitpane。 In panel 1 created search button,jLabel and JTextBox for sect data from Databse...in Panel 2 i want to show search result in JTable.my database query and all working well..But i couldn't display JTable in panel2...anyone can help me to solve the issue.
在面板1中创建了搜索按钮,jLabel和JTextBox用于来自Databse的sect数据...在面板2中我想在JTable.my数据库查询中显示搜索结果并且一切运行良好..但是我无法在panel2中显示JTable ..任何人都可以帮我解决这个问题。
public JFrame TimesheetReport(){ //Creating 1st JFrame public JFrame TimesheetReport(){//创建第一个JFrame
final JFrame employeeFrame = new JFrame("Report");
employeeFrame.setExtendedState(Frame.MAXIMIZED_BOTH);
employeeFrame.setResizable(true)
employeeFrame.setLocation(100,50);
employeeFrame.setVisible(true);
employeeFrame.setResizable(false);
panel.setLayout(new FlowLayout());
panel1.setLayout(new BorderLayout());
employeeFrame.pack();
final JLabel label1;
final JLabel label2;
final JTextField text1;
final JTextField text2;
final JButton ADD;
{
label1 = new JLabel("From Date");
text1 = new JTextField(12);
label2 = new JLabel("End Date");
text2 = new JTextField(12);
JButton button2 = new JButton("calendar");
ADD=new JButton("Search");
ADD.setText("Search");
ADD.addActionListener(new java.awt.event.ActionListener() {
@Override
public void actionPerformed(java.awt.event.ActionEvent e) {
DbUtility TimesheetReport=new DbUtility();
TimesheetReport. loadDriver();
TimesheetReport.connect();
String value=(text1.getText());
String value2=(text2.getText());
ResultSet rs= TimesheetReport.executeSelectQuery14(value,value2);
String Activityid =null, EmployeeName = null,StartDate = null,EndDate=null,Activity=null,Project=null,Day1=null,Day2=null,Day3=null,Day4=null,Day5=null ;
try {
while (rs.next()) {
Activityid = rs.getString("Activityid");
EmployeeName = rs.getString("EmployeeName");
StartDate = rs.getString("StartDate");
EndDate = rs.getString("EndDate");
Activity = rs.getString("Activity");
Project= rs.getString("Project");
Day1 = rs.getString("Day1");
Day2 = rs.getString("Day2");
Day3 = rs.getString("Day3");
Day4 = rs.getString("Day4");
Day5 = rs.getString("Day5");
String[] columnNames = {"Activityid","EmployeeName", "StatrDate","EndDate", "Activity","Project","Day1","Day2","Day3","Day3","Day4","Day5"};
String data[][] = {{Activityid,EmployeeName, StartDate,EndDate,Activity,Project,Day1,Day2,Day3,Day4,Day5}};
System.out.println(Activityid+" "+EmployeeName+" "+StartDate+"" +EndDate+""+Activity+" "+Project+""+Day1+""+Day2+""+Day3+""+Day4+""+Day5);
final DefaultTableModel model = new DefaultTableModel(data, columnNames);
table2= new JTable(model);
table2.setRowHeight( 70 );
table2.setFillsViewportHeight(true);
JTextField field = new JTextField();
field.setForeground(Color.RED);
field.setBackground(Color.RED);
table2.getTableHeader().setPreferredSize(new Dimension(50,50));
table2.getTableHeader().setBackground(Color.blue);
table2.getTableHeader().setForeground(Color.white);
table2.getTableHeader().setFont(new Font("Serif", Font.BOLD, 15));
table2.getTableHeader().setOpaque(true);
table2.getModel();
table2.setForeground(Color.blue);
table2.setBackground(Color.white);
table2.setGridColor(Color.MAGENTA);
table2.setShowGrid(true);
JScrollPane pane = new JScrollPane(table2);
panel1.add(pane);
}
} catch (SQLException e1) {
e1.printStackTrace();
}
}
});
JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,panel,panel1 );
splitPane.setDividerLocation(300);
Dimension minimumSize = new Dimension(250, 0);
panel.setMinimumSize(minimumSize);
employeeFrame.add(splitPane);
pane.add(panel1);
panel.add(label1);
label1.setForeground(Color.white);
panel.add(text1);
panel.add(label2);
label2.setForeground(Color.white);
panel.add( text2);
panel.add(ADD);
}
return employeeFrame;
}
But i couldn't display JTable in panel2...anyone can help me to solve the issue.
但我无法在panel2中显示JTable ......任何人都可以帮我解决问题。
Your code is not in SSCCE format... It does not compile on a simple copy and paste and at that there is an error as table2
is not declared within the methods scope of given code also there isnt any reference to panel2
but I think you meant panel1
... 你的代码不是SSCCE格式...它不能在简单的复制和粘贴上编译,并且由于
table2
未在给定代码的方法范围内声明,因此没有任何对panel2
引用,但我认为你意思是panel1
......
Solution: 解:
1) Dont use null
/ Absolute
LayoutManager
. 1)不要使用
null
/ Absolute
LayoutManager
。
Have a read on: 请阅读:
2) Why do you need to add JTable
to panel1
(or as quoted in the question panel2
)? 2)为什么需要将
JTable
添加到panel1
(或在问题panel2
引用)? If anything we would add the JScrollPane
which has the JTable
as its viewport to panel1
Simply add table2
to JScrollPane
and add JScrollPane
to JSplitPane
ie: 如果有的话,我们将添加
JScrollPane
它具有JTable
作为其视口 panel1
只需添加table2
到JScrollPane
,并添加JScrollPane
以JSplitPane
,即:
JScrollPane pane = new JScrollPane(table2);
JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, panel, pane);
Alternatively add JTable
to JScrollPane
and than add JScrollPane
to panel1
with BorderLayout
so JPanel
will stretch to container size: 或者将
JTable
添加到JScrollPane
, panel1
使用BorderLayout
将JScrollPane
添加到panel1
,以便JPanel
扩展到容器大小:
JPanel panel1=new JPanel(new BorderLayout());
....
JScrollPane pane = new JScrollPane(table2);
panel1.add(pane);
JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, panel, panel1);
3) Also because I see you maximize the JFrame
via: 3)另外因为我看到你通过以下方式最大化
JFrame
:
JFrame#setExtendedState(JFrame.MAXIMIZED_BOTH);
it would be wise to use a LayoutManager
which auto resizes components when the JFrame size is changed. 使用
LayoutManager
是明智的,它可以在更改JFrame大小时自动调整组件大小。 ie BorderLayout
, GridLayout
and GridBagLayout
are a few that come to mind. 即
BorderLayout
, GridLayout
和GridBagLayout
是我想到的一些。
4) Also dont set the JFrame
visible before all components are added. 4)在添加所有组件之前,也不
JFrame
设置为可见。
5) Create Swing components on Event Dispatch Thread via SwingUtilities.invokeLater(Runnable r)
block. 5)通过
SwingUtilities.invokeLater(Runnable r)
块在Event Dispatch Thread上创建Swing组件。
6) Dont forget to call pack()
on JFrame
before setting it visible but after adding components. 6)在设置它之前,不要忘记在
JFrame
上调用pack()
,但是在添加组件之后。
7) Also I find this comment suspicous: //Creating 1st JFrame
Have a read on The Use of Multiple JFrames, Good/Bad Practice? 7)我也觉得这个评论很可疑:
//Creating 1st JFrame
阅读使用多个JFrame,好/坏练习? . 。 Rather use
CardLayout
or JDialog
. 而是使用
CardLayout
或JDialog
。
8) I cant see the need for setLocation
with a fully extended JFrame
. 8)我无法看到需要使用完全扩展的
JFrame
setLocation
。
Here is your code with fixes (I just used all components default LayoutManager
s (except panel1
which uses BorderLayout
so JPanel
will stretch to container size): 这是你的代码修复(我只使用了所有组件的默认
LayoutManager
(除了使用BorderLayout
panel1
,因此JPanel
将扩展到容器大小):
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Frame;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTable;
import javax.swing.JTextField;
public class Test {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new Test();
}
});
}
public Test() {
createAndShowGui();
}
public void createAndShowGui() {
final JFrame employeeFrame = new JFrame("Report");
employeeFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
final JPanel panel = new JPanel() {
@Override
public Dimension getMinimumSize() {
return new Dimension(250, 0);
}
};
final JTable table2 = new JTable(new String[][]{
{"one", "two", "three"},
{"one", "two", "three"},
{"one", "two", "three"}
}, new String[]{"col1", "col2", "col3"});
JPanel panel1 = new JPanel(new BorderLayout());//panel which holds jtable
final JLabel label1;
final JLabel label2;
final JTextField text1;
final JTextField text2;
final JButton ADD;
label1 = new JLabel("From Date");
text1 = new JTextField(12);
label2 = new JLabel("End Date");
text2 = new JTextField(12);
JButton button2 = new JButton("calendar");
ADD = new JButton("Search");
ADD.setText("Search");
ADD.addActionListener(new java.awt.event.ActionListener() {
@Override
public void actionPerformed(java.awt.event.ActionEvent e) {
/*
DbUtility createAndShowGui = new DbUtility();
createAndShowGui.loadDriver();
createAndShowGui.connect();
String value = (text1.getText());
String value2 = (text2.getText());
ResultSet rs = createAndShowGui.executeSelectQuery14(value, value2);
String Activityid = null, EmployeeName = null, StartDate = null, EndDate = null, Activity = null, Project = null, Day1 = null, Day2 = null, Day3 = null, Day4 = null, Day5 = null;
try {
while (rs.next()) {
Activityid = rs.getString("Activityid");
EmployeeName = rs.getString("EmployeeName");
StartDate = rs.getString("StartDate");
EndDate = rs.getString("EndDate");
Activity = rs.getString("Activity");
Project = rs.getString("Project");
Day1 = rs.getString("Day1");
Day2 = rs.getString("Day2");
Day3 = rs.getString("Day3");
Day4 = rs.getString("Day4");
Day5 = rs.getString("Day5");
String[] columnNames = {"Activityid", "EmployeeName", "StatrDate", "EndDate", "Activity", "Project", "Day1", "Day2", "Day3", "Day3", "Day4", "Day5"};
String data[][] = {{Activityid, EmployeeName, StartDate, EndDate, Activity, Project, Day1, Day2, Day3, Day4, Day5}};
System.out.println(Activityid + " " + EmployeeName + " " + StartDate + "" + EndDate + "" + Activity + " " + Project + "" + Day1 + "" + Day2 + "" + Day3 + "" + Day4 + "" + Day5);
final DefaultTableModel model = new DefaultTableModel(data, columnNames);
table2 = new JTable(model);
table2.setRowHeight(70);
table2.setFillsViewportHeight(true);
JTextField field = new JTextField();
field.setForeground(Color.RED);
field.setBackground(Color.RED);
table2.getTableHeader().setPreferredSize(new Dimension(50, 50));
table2.getTableHeader().setBackground(Color.blue);
table2.getTableHeader().setForeground(Color.white);
table2.getTableHeader().setFont(new Font("Serif", Font.BOLD, 15));
table2.getTableHeader().setOpaque(true);
table2.getModel();
table2.setForeground(Color.blue);
table2.setBackground(Color.white);
table2.setGridColor(Color.MAGENTA);
table2.setShowGrid(true);
}
} catch (SQLException e1) {
e1.printStackTrace();
}
*/
}
});
panel.add(label1);
label1.setForeground(Color.white);
panel.add(text1);
panel.add(label2);
label2.setForeground(Color.white);
panel.add(text2);
panel.add(ADD);
JScrollPane pane = new JScrollPane(table2);
panel1.add(pane);
JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, panel, panel1);
splitPane.setDividerLocation(300);
employeeFrame.add(splitPane);
employeeFrame.setExtendedState(Frame.MAXIMIZED_BOTH);
//employeeFrame.setLocation(100, 50);
employeeFrame.pack();
employeeFrame.setVisible(true);
employeeFrame.setResizable(false);//or else it wont work nicely withn JFrame#setExtendedState
}
}
通过查看您的代码,我找不到您将Table放置在Panel实际上在SplitPane中添加的面板或窗格的位置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.