如何解决在拆分的面板中显示另一个类的数据
我想显示来自两个或多个mysql表的数据。好吧,两个表就足够了。
我发现以下代码可构建两个拆分面板。
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridLayout;
import javax.swing.*;
public class Combo extends javax.swing.JFrame{
private final JSplitPane splitPane;
private final JPanel topPanel;
private final JPanel bottomPanel;
private final JScrollPane scrollPane;
private final JTextArea textArea;
private final JPanel inputPanel;
private final JButton button;
public Combo(){
splitPane = new JSplitPane();
topPanel = new JPanel();
bottomPanel = new JPanel();
scrollPane = new JScrollPane();
textArea = new JTextArea();
inputPanel = new JPanel();
button = new JButton("send");
setPreferredSize(new Dimension(980,800));
getContentPane().setLayout(new GridLayout());
getContentPane().add(splitPane);
splitPane.setOrientation(JSplitPane.VERTICAL_SPLIT);
splitPane.setDividerLocation(400);
splitPane.setTopComponent(topPanel);
splitPane.setBottomComponent(bottomPanel);
/****Insert here data from another class *****/
String workData = "2020 Agosto";
NoFrame topSplit = new NoFrame(workData);
topPanel.add(topSplit);
bottomPanel.setLayout(new BoxLayout(bottomPanel,BoxLayout.Y_AXIS));
bottomPanel.add(scrollPane);
scrollPane.setViewportView(textArea);
bottomPanel.add(inputPanel);
inputPanel.setMaximumSize(new Dimension(Integer.MAX_VALUE,75));
inputPanel.setLayout(new BoxLayout(inputPanel,BoxLayout.X_AXIS));
inputPanel.add(button);
pack();
}
public static void main(String args[]){
EventQueue.invokeLater(new Runnable(){
@Override
public void run(){
new Combo().setVisible(true);
}
});
}
}
我想将以下课程中的数据添加到topPanel
import java.awt.Color;
import java.awt.Component;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Vector;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.border.TitledBorder;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
public class NoFrame extends JPanel{
public String foo;
public JPanel newPanel;
public void dataPanel (String workData){
JPanel newPanel = new JPanel();
NoFrame zz = new NoFrame(workData);
newPanel.add(zz);
}
public NoFrame(String workData)
{
String anno = workData.substring(0,4);
String Mese = workData.substring(5);
int mese= Integer.parseInt(getMonthNbr(Mese));
ArrayList columnNames = new ArrayList();
ArrayList data = new ArrayList();
// Connect to an MySQL Database,run query,get result set
[ usual stuff]
try (Connection connection =
DriverManager.getConnection( url,userid,password );
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery( sql )) {
ResultSetMetaData md = rs.getMetaData();
int columns = md.getColumnCount() - 2;
// Get column names
for (int i = 1; i <= columns; i++) {
String columnVal = md.getColumnName(i);
columnNames.add(columnVal );}
}
// Get row data
while (rs.next())
{
ArrayList row = new ArrayList(columns);
for (int i = 1; i <= columns; i++) {
foo = null;
foo = rs.getString(i);
row.add(foo);
}
data.add( row );
}
}
catch (SQLException e) {JOptionPane.showMessageDialog(null,e.getMessage());}
// Create Vectors and copy over elements from ArrayLists to them
// Vector is deprecated but I am using them in this example to keep
// things simple - the best practice would be to create a custom defined
// class which inherits from the AbstractTableModel class
Vector columnNamesVector = new Vector();
Vector dataVector = new Vector();
for (int i = 0; i < data.size(); i++)
{
ArrayList subArray = (ArrayList)data.get(i);
Vector subVector = new Vector();
for (int j = 0; j < subArray.size(); j++) {
subVector.add(subArray.get(j));
}
dataVector.add(subVector);
}
for (int i = 0; i < columnNames.size(); i++ ) {
columnNamesVector.add(columnNames.get(i));
}
JTable table = new JTable(dataVector,columnNamesVector);
table.setFont(new Font("Verdana",Font.PLAIN,11));
table.setAutoResizeMode( JTable.AUTO_RESIZE_OFF );
for (int column = 0; column < table.getColumnCount(); column++) {
TableColumn tableColumn = table.getColumnModel().getColumn(column);
int preferredWidth = tableColumn.getMinWidth();
int maxWidth = tableColumn.getMaxWidth();
table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
for (int row = 0; row < table.getRowCount(); row++) {
TableCellRenderer cellRenderer = table.getCellRenderer(row,column);
Component cell = table.prepareRenderer(cellRenderer,row,column);
int width = cell.getPreferredSize().width + table.getIntercellSpacing().width;
preferredWidth = Math.max(preferredWidth,width);
if (preferredWidth >= maxWidth) {
preferredWidth = maxWidth;
break;
}
}
tableColumn.setPreferredWidth( preferredWidth);
CustomRenderer renderer = new CustomRenderer();
renderer.setHorizontalAlignment(JLabel.CENTER);
for (int col = 0; col < table.getColumnCount(); col++) {
table.getColumnModel().getColumn(col).setCellRenderer(renderer);
}
}
JScrollPane scrollPane = new JScrollPane( table,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
scrollPane.setBorder(BorderFactory.createTitledBorder (BorderFactory.createEtchedBorder (),"Table allhour",TitledBorder.CENTER,TitledBorder.TOP,new Font("Verdana",Font.BOLD,14),Color.blue));
JPanel panel = new JPanel();
scrollPane.add(panel);
newPanel.add(table);
}
public void jButton1ActionPerformed(ActionEvent evt) { }
public String getMonthNbr(String inputMese) {
[...]
return cmese;
}
}
NoFrame
已正确执行[newPanel.add(table)包含整个数据],但是Combo
的返回仅显示两个拆分的面板和按钮。 topSplit
包含newPanel
= 空
有什么建议吗?
拍子
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。