创建带挥杆的可滚动窗格的问题
-
20-12-2019 - |
题
我有以下课程...
public class MessageFrame extends JFrame {
public MessageFrame(List<HistoryMessage> messages){
setLayout(null);
JPanel container = new JPanel();
JScrollPane scrPane = new JScrollPane(container);
getContentPane().add(scrPane);
int i = 1;
for(HistoryMessage m : messages){
//TODO: needs to be StringBuilder
StringBuilder sb = new StringBuilder();
sb.append("<html> <strong>");
sb.append(m.getSender());
sb.append(" ");
Date d = new Date(m.getDate());
sb.append(d);
sb.append(":</strong>");
sb.append(m.getPayload());
sb.append("</html>");
JLabel l = new JLabel(sb.toString());
l.setBounds(30, i, 400, 50);
i += 125;
container.add(l);
}
setTitle("Messages");
setSize(500,500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
}
.
这对我没有任何信息,但是,如果我不使用滚动窗格这个工作...
public MessageFrame(List<HistoryMessage> messages){
setLayout(null);
int i = 1;
for(HistoryMessage m : messages){
//TODO: needs to be StringBuilder
StringBuilder sb = new StringBuilder();
sb.append("<html> <strong>");
sb.append(m.getSender());
sb.append(" ");
Date d = new Date(m.getDate());
sb.append(d);
sb.append(":</strong>");
sb.append(m.getPayload());
sb.append("</html>");
JLabel l = new JLabel(sb.toString());
l.setBounds(30, i, 400, 50);
i += 125;
add(l);
}
setTitle("Messages");
setSize(500,500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
.
但没有滚动所以只有前几个出现,有人可以帮助我我缺少的东西吗?
解决方案
setLayout(null);
.
不要使用null布局。
l.setBounds(30, i, 400, 50);
.
不要使用setBounds(...)。
滚动条将在添加到滚动块的组件的首选大小大于滚动窗格的大小时自动出现。
让布局管理者到他们的工作。阅读 layout managers 并使用适当的布局管理器或嵌套布局管理器的组合。
其他提示
以下是+ camickr更改后的新版本....
public class MessageFrame extends JFrame {
public MessageFrame(List<HistoryMessage> messages){
JPanel container = new JPanel();
container.setLayout(new BoxLayout(container, BoxLayout.PAGE_AXIS));
JScrollPane scrPane = new JScrollPane(container);
getContentPane().add(scrPane);
int i = 1;
for(HistoryMessage m : messages){
//TODO: needs to be StringBuilder
StringBuilder sb = new StringBuilder();
sb.append("<html> <strong>");
sb.append(m.getSender());
sb.append(" ");
Date d = new Date(m.getDate());
sb.append(d);
sb.append(":</strong>");
sb.append(m.getPayload());
sb.append("</html>");
JLabel l = new JLabel(sb.toString());
i += 125;
container.add(l);
}
setTitle("Messages");
setSize(500,500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
}
. 不隶属于 StackOverflow