gpt4 book ai didi

java - JTable 面板中显示白框,原因不明

转载 作者:行者123 更新时间:2023-12-02 02:30:07 24 4
gpt4 key购买 nike

我正在为一门类(class)构建一个 Swing 应用程序。将 JTable 添加到面板后,表网格和列标题未显示。相反,面板中应该是表格的地方出现了一个白色框。为什么会发生这种情况以及如何解决?

public class ReminderGui implements ActionListener {
JFrame frame;
JPanel panel;
JLabel lblTitle,lblDetails,lblDate,lblTime;
JTextField titleField,dateField;
JTextArea detailsArea;
JButton addButton,cancelButton,rmvButton,rmvallButton,editButton;
JTable table;
JComboBox<String> hourcbo,minutecbo,ampmcbo;
ArrayList<Reminder> remList;


final String hour[]={"12","1","2","3","4","5","6","7","8","9","10","11"};
final String minute[]={"00","01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20",
"21","22","23","24","25","26","27","28","29","30","31","32","33","34","35","36","37","38","39","40",
"41","42","43","44","45","46","47","48","49","50","51","52","53","54","55","56","57","58","59"
};
final String ampm[]={"AM","PM"};
String[] columnname={"Reminder Name", "Reminder Detail","Reminder Date","Reminder Time"};


public ReminderGui() throws FileNotFoundException, IOException, ClassNotFoundException{

panel=new JPanel();
panel.setLayout(null);

lblTitle=new JLabel("Reminder Title");
lblDetails=new JLabel("Reminder Details");
lblDate=new JLabel("Set Date(date/motnth/year)");
lblTime=new JLabel("Set Time");

titleField=new JTextField();
titleField.setMargin(new Insets(5,5,5,5));


detailsArea=new JTextArea(10,20);
detailsArea.setLineWrap(true);
detailsArea.setMargin(new Insets(5,5,5,5));
JScrollPane scroller1=new JScrollPane(detailsArea);
scroller1.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
scroller1.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);


//date and time component

dateField=new JTextField();
dateField.setMargin(new Insets(5,5,5,5));


hourcbo=new JComboBox<String>(hour);
hourcbo.setBackground(Color.white);
minutecbo=new JComboBox<String>(minute);
minutecbo.setBackground(Color.white);
ampmcbo=new JComboBox<String>(ampm);
ampmcbo.setBackground(Color.white);

addButton=new JButton("Add");
cancelButton=new JButton("Cancel");
editButton=new JButton("Edit");
rmvButton=new JButton("Remove Selected");
rmvallButton=new JButton("Remove all");



lblTitle.setBounds(30, 30, 100, 30);
panel.add(lblTitle);
titleField.setBounds(150, 30, 400, 30);
panel.add(titleField);
lblDetails.setBounds(30, 80, 100, 30);
panel.add(lblDetails);
scroller1.setBounds(150, 80, 400, 200);
panel.add(scroller1);
lblDate.setBounds(30, 310, 170, 30);
panel.add(lblDate);
dateField.setBounds(210, 310, 100, 30);
panel.add(dateField);
lblTime.setBounds(340, 310, 50, 30);
panel.add(lblTime);
hourcbo.setBounds(400, 310, 100, 30);
minutecbo.setBounds(510, 310, 100, 30);
ampmcbo.setBounds(620, 310, 100, 30);
panel.add(hourcbo);
panel.add(minutecbo);
panel.add(ampmcbo);
addButton.setBounds(30,380,100,30);
panel.add(addButton);
cancelButton.setBounds(160,380,100,30);
panel.add(cancelButton);



File file=new File("appFile.chk");
Object[][] data = null;
if(!(file.exists())){
remList=new ArrayList<Reminder>();
ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream(file));
oos.writeObject(remList);
oos.flush();
oos.close();
}

ObjectInputStream ois=new ObjectInputStream(new FileInputStream(file));
remList=(ArrayList<Reminder>)ois.readObject();
int rownum=remList.size();
data=new String[rownum][4];
Iterator<Reminder> it=remList.iterator();
Reminder rem=null;
for(int i=0;i<rownum;i++){
if(it.hasNext()){
rem=it.next();
}

data[i][0]=rem.getReminderTitle();
data[i][1]=rem.getReminderDetails();
data[i][2]=rem.getReminderDate();
data[i][3]=rem.getReminderTime();
}

ois.close();



//jtable

table=new JTable(data,columnname);
table.setBounds(160,450,400,300);


JScrollPane scroller2=new JScrollPane(table);
scroller1.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
scroller1.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
panel.add(table);


addButton.addActionListener(this);
cancelButton.addActionListener(this);
editButton.addActionListener(this);
rmvButton.addActionListener(this);
rmvallButton.addActionListener(this);



//set framesize when other works are done
frame=new JFrame("RemindMe!");
frame.add(panel);
frame.setSize(850,840);
frame.setVisible(true);
frame.setLocationRelativeTo(null);
frame.setResizable(false);
}

@Override
public void actionPerformed(ActionEvent e) {
//throw new UnsupportedOperationException("Not supported yet.");
if(e.getSource()==addButton){
String s1=(String)titleField.getText();
String s2=(String)detailsArea.getText();
String s3=(String)dateField.getText();
String s4=(String)hourcbo.getSelectedItem()+":"+(String)minutecbo.getSelectedItem()+" "+(String)ampmcbo.getSelectedItem();

}
else if(e.getSource()==cancelButton){
titleField.setText("");
detailsArea.setText("");
dateField.setText("");

}



}

最佳答案

您已将 JTable 添加到多个容器中 - 既包括 JScrollPane 的视口(viewport)(好的),也添加到面板 JPanel(坏的)。第二个操作将从 JScrollPane 中删除 JTable,以便稍后将 JScrollPane 添加到面板时,它不会包含任何内容。

JScrollPane scroller2=new JScrollPane(table);

好!

panel.add(table);

糟糕!

解决方案:不要这样做。将您的组件添加到一个且仅一个容器中。

其他问题:

panel.setLayout(null);

不要使用空布局,因为这会导致 GUI 脆弱,在一个平台上看起来还不错,但在其他平台上看起来不太好,而且很难调试和增强。学习并使用布局管理器。

关于java - JTable 面板中显示白框,原因不明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47242343/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com