Java 如何在同一帧中显示JTable值?
我不熟悉java swing框架,我遇到了一个问题,我想在Jtable中显示数据库中的值,Jtable应该在使用JTree的同一帧中打印这些值,我已经编写了一个代码,但它会在新的JFrame而不是现有帧中打开Jtable。 我有四节课 1:主机 2:应用程序(主类) 3:工具栏 4:文本面板 我附上所有课程的代码,请在这方面帮助我Java 如何在同一帧中显示JTable值?,java,swing,jdbc,jtable,Java,Swing,Jdbc,Jtable,我不熟悉java swing框架,我遇到了一个问题,我想在Jtable中显示数据库中的值,Jtable应该在使用JTree的同一帧中打印这些值,我已经编写了一个代码,但它会在新的JFrame而不是现有帧中打开Jtable。 我有四节课 1:主机 2:应用程序(主类) 3:工具栏 4:文本面板 我附上所有课程的代码,请在这方面帮助我 public class App { public static void main(String[] args) { SwingU
public class App {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
try {
MainFrame m = new MainFrame();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
});
}
public class MainFrame extends JFrame {
JFrame frame1 = new JFrame("Database Search Result");
private JButton btn;
String[] columnNames = {"id", "state", "ip", "subnet","gateway","country"};
private TextPanel textPanel;
private Toolbar toolbar;
Connection conn;
Statement st;
ResultSet rs;
static JTable table;
String id;
PreparedStatement pst;
public MainFrame() throws SQLException, ClassNotFoundException {
setTitle("Hello World");
btn = new JButton("Hello");
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(e.getActionCommand()=="Hello")
{
System.out.println("yo");
showTableData();
}
}
});
Class.forName("com.mysql.jdbc.Driver");
conn =(Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/software", "root", "root");
System.out.println("successe");
st = (Statement) conn.createStatement();
rs = (ResultSet) st.executeQuery("select * from software.servers");
textPanel = new TextPanel();
toolbar = new Toolbar();
toolbar.setTextPanel(textPanel);
setLayout(new BorderLayout());
add(toolbar,BorderLayout.NORTH);
add(btn,BorderLayout.SOUTH);
add(textPanel,BorderLayout.CENTER);
setSize(600, 600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public void showTableData() {
frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame1.setLayout(new BorderLayout());
DefaultTableModel model = new DefaultTableModel();
model.setColumnIdentifiers(columnNames);
table = new JTable();
table.setModel(model);
table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
table.setFillsViewportHeight(true);
JScrollPane scroll = new JScrollPane(table);
scroll.setHorizontalScrollBarPolicy(
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
scroll.setVerticalScrollBarPolicy(
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
int id;
String state = "";
String ip = "";
String subnet = "";
String gateway="";
String country="";
try {
st = (Statement) conn.createStatement();
rs = (ResultSet) st.executeQuery("select * from software.servers");
int i = 0;
while (rs.next()) {
id = rs.getInt("id");
state = rs.getString("state");
ip = rs.getString("ip");
subnet = rs.getString("subnet");
gateway=rs.getString("gateway");
country=rs.getString("country");
model.addRow(new Object[]{id, state, ip, subnet,gateway,country});
i++;
}
if (i < 1) {
JOptionPane.showMessageDialog(null, "No Record Found", "Error", JOptionPane.ERROR_MESSAGE);
}
if (i == 1) {
System.out.println(i + " Record Found");
} else {
System.out.println(i + " Records Found");
}
} catch (Exception ex) {
JOptionPane.showMessageDialog(null, ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
}
frame1.add(scroll);
frame1.setVisible(true);
frame1.setSize(400, 600);
}
public class TextPanel extends JPanel {
TextPanel(){
tree = new JTree(createTree());
setLayout(new BorderLayout());
add(new JScrollPane(tree),BorderLayout.CENTER);
}
public JTree getTree() {
return tree;
}
public void setTree(JTree tree) {
this.tree = tree;
}
public DefaultMutableTreeNode createTree(){
DefaultMutableTreeNode top = new DefaultMutableTreeNode("Servers");
DefaultMutableTreeNode node1 = new DefaultMutableTreeNode("USA");
DefaultMutableTreeNode server1 = new DefaultMutableTreeNode("Boston");
DefaultMutableTreeNode server2 = new DefaultMutableTreeNode("New York");
DefaultMutableTreeNode server3 = new DefaultMutableTreeNode("Califiornia");
node1.add(server1); node1.add(server2); node1.add(server3);
DefaultMutableTreeNode node2 = new DefaultMutableTreeNode("UK");
DefaultMutableTreeNode server4 = new DefaultMutableTreeNode("Warwick");
DefaultMutableTreeNode server5 = new DefaultMutableTreeNode("London");
DefaultMutableTreeNode server6 = new DefaultMutableTreeNode("Dublin");
node2.add(server4);node2.add(server5);node2.add(server6);
top.add(node1);top.add(node2);
return top;
}
public class Toolbar extends JPanel implements ActionListener {
private JButton btn1;
private JButton btn2;
private TextPanel panel;
public Toolbar() {
btn1= new JButton("one");
btn2=new JButton("two");
btn1.addActionListener(this);
btn2.addActionListener(this);
setLayout(new FlowLayout());
add(btn1);add(btn2);
}
public void setTextPanel(TextPanel textPanel) {
panel = textPanel;
}
@Override
public void actionPerformed(ActionEvent e) {
//panel.getTextArea().append("Hello\n");
JButton clicked = (JButton) e.getSource();
if(clicked == btn1){
System.out.println("Btn1 clicked");
}else{
System.out.println("Btn2 clicked");
}
}
}
公共类应用程序{
公共静态void main(字符串[]args){
SwingUtilities.invokeLater(新的Runnable(){
@凌驾
公开募捐{
试一试{
大型机m=新的大型机();
}catch(classnotfound异常){
e、 printStackTrace();
}捕获(SQLE){
e、 printStackTrace();
}
}
});
}
公共类大型机扩展JFrame{
JFrame frame1=新JFrame(“数据库搜索结果”);
专用按钮btn;
String[]columnNames={“id”、“state”、“ip”、“subnet”、“gateway”、“country”};
私人文本面板文本面板;
专用工具栏;
连接接头;
报表st;
结果集rs;
静态JTable表;
字符串id;
编制报表pst;
公共大型机()抛出SQLException,ClassNotFoundException{
setTitle(“你好世界”);
btn=新的JButton(“你好”);
btn.addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
如果(如getActionCommand()=“你好”)
{
System.out.println(“yo”);
showTableData();
}
}
});
Class.forName(“com.mysql.jdbc.Driver”);
conn=(连接)DriverManager.getConnection(“jdbc:mysql://localhost:3306/software“,”根“,”根“);
System.out.println(“成功”);
st=(语句)conn.createStatement();
rs=(ResultSet)st.executeQuery(“从software.servers中选择*);
textPanel=新的textPanel();
工具栏=新工具栏();
工具栏.setTextPanel(textPanel);
setLayout(新的BorderLayout());
添加(工具栏,BorderLayout.NORTH);
添加(btn,BorderLayout.SOUTH);
添加(textPanel,BorderLayout.CENTER);
设置大小(600600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(真);
}
public void showTableData(){
frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame1.setLayout(新的BorderLayout());
DefaultTableModel=新的DefaultTableModel();
model.setColumnIdentifiers(columnNames);
table=新的JTable();
表2.setModel(model);
table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
表.setFillsViewPerthweight(真);
JScrollPane scroll=新的JScrollPane(表);
scroll.setHorizontalScrollBarPolicy(
JScrollPane.水平滚动条(根据需要);
scroll.setVerticalScrollBarPolicy(
JScrollPane.垂直滚动条(根据需要);
int-id;
字符串状态=”;
字符串ip=“”;
字符串子网=”;
字符串网关=”;
字符串country=“”;
试一试{
st=(语句)conn.createStatement();
rs=(ResultSet)st.executeQuery(“从software.servers中选择*);
int i=0;
while(rs.next()){
id=rs.getInt(“id”);
state=rs.getString(“state”);
ip=rs.getString(“ip”);
子网=rs.getString(“子网”);
网关=rs.getString(“网关”);
国家=rs.getString(“国家”);
addRow(新对象[]{id,state,ip,subnet,gateway,country});
i++;
}
if(i<1){
showMessageDialog(null,“未找到记录”,“错误”,JOptionPane.Error\u消息);
}
如果(i==1){
System.out.println(i+“找到记录”);
}否则{
System.out.println(i+“找到记录”);
}
}捕获(例外情况除外){
showMessageDialog(null,例如getMessage(),“Error”,JOptionPane.Error_MESSAGE);
}
frame1.添加(滚动);
frame1.setVisible(true);
框架1.设置大小(400600);
}
公共类TextPanel扩展了JPanel{
TextPanel(){
tree=newjtree(createTree());
setLayout(新的BorderLayout());
添加(新的JScrollPane(树),BorderLayout.CENTER);
}
公共JTree getTree(){
回归树;
}
公共无效集合树(JTree树){
this.tree=树;
}
公共DefaultMutableTreeNode createTree(){
DefaultMutableTreeNode top=新的DefaultMutableTreeNode(“服务器”);
DefaultMutableTreeNode1=新的DefaultMutableTreeNode(“美国”);
DefaultMutableTreeNode服务器1=新的DefaultMutableTreeNode(“波士顿”);
DefaultMutableTreeNode服务器2=新的DefaultMutableTreeNode(“纽约”);
DefaultMutableTreeNode服务器3=新的DefaultMutableTreeNode(“加利福尼亚”);
node1.add(服务器1);node1.add(服务器2);node1.add(服务器3);
DefaultMutableTreeNode2=新的DefaultMutableTreeNode(“英国”);
DefaultMutableTreeNode服务器4=新的DefaultMutableTreeNode(“Warwick”);
DefaultMutableTreeNode服务器5=新的DefaultMutableTreeNode(“伦敦