当用户提示我这样做时,我想要填充一个表.问题是,我无法预测表最终会有多少行.在我的面板的构造函数中,我将显示表
// add empty scrollPane to JPanel which will later hold table
scrollPane = new JScrollPane();
add(scrollPane);
Run Code Online (Sandbox Code Playgroud)
这个类包含一个方法,当我想最终显示表时将调用该方法
public void displayTable(String[] columnNames, String[][] dataValues)
{
table = new JTable(dataValues, columnNames);
table.setPreferredScrollableViewportSize(new Dimension(300, 80));
table.setFillsViewportHeight(true);
scrollPane.add(table);
this.setVisible(true);
scrollPane.repaint();
}
Run Code Online (Sandbox Code Playgroud)
问题是,表格永远不会显示.我只看到ScrollPane里面没有桌子的轮廓.为什么不显示表格以及如何修复它?
我已经看到很多在树实例化期间更改节点图标的示例,但我想要一种方法来稍后动态更改单个节点的图标.所以,在我的主代码中,我将自定义渲染器添加到我的树中:
// Icon I want to set nodes to later
ImageIcon checkIcon = new ImageIcon("check.jpg");
// Creates tree with my nodes
JTree tree = new JTree(nodes.top);
// Create custom renderer
Scenario1Renderer renderer = new Scenario1Renderer();
// Set to single tree selection
tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
// Set tree to my custom renderer
//renderer.setRendererIcon(greenIcon);
tree.setCellRenderer(renderer);
Run Code Online (Sandbox Code Playgroud)
我在渲染器中的代码是
public class Scenario1Renderer extends DefaultTreeCellRenderer {
ImageIcon rendererIcon;
public void setRendererIcon(ImageIcon myIcon){
this.rendererIcon = myIcon;
};
public Component getTreeCellRendererComponent(
JTree tree,
Object value,
boolean sel,
boolean expanded,
boolean …Run Code Online (Sandbox Code Playgroud) 我将在前言中说我对Perl和Socket编程的经验都很少,所以我感谢我能得到的任何帮助.我有一个TCP服务器,它需要同时处理多个客户端连接,并且能够随时从任何一个客户端接收数据,并且能够根据收到的信息将数据发送回客户端.例如,Client1和Client2连接到我的服务器.Client2发送"Ready",服务器将其解释并向Client1发送"Go".以下是我到目前为止所写的内容:
my $sock = new IO::Socket::INET
{
LocalHost => $host, // defined earlier in code
LocalPort => $port, // defined earlier in code
Proto => 'tcp',
Listen => SOMAXCONN,
Reuse => 1,
};
die "Could not create socket $!\n" unless $sock;
while ( my ($new_sock,$c_addr) = $sock->accept() ) {
my ($client_port, $c_ip) = sockaddr_in($c_addr);
my $client_ipnum = inet_ntoa($c_ip);
my $client_host = "";
my @threads;
print "got a connection from $client_host", "[$client_ipnum]\n";
my $command;
my $data;
while ($data = <$new_sock>) { …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建我的第一个JTree,但是当我尝试将我的节点添加到树中时,更改没有生效,所有显示的都是一个带有一些默认节点的树(颜色,运动,食物).
树所在的主面板代码:
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
public class Scenario1Panel extends JPanel
{
/**
*
*/
private static final long serialVersionUID = 1L;
public Scenario1Tree scenario1Tree;
public Scenario1Panel()
{
scenario1Tree = new Scenario1Tree();
add(scenario1Tree);
}
public static void main(String args[])
{
try
{
String lookAndFeel = UIManager.getSystemLookAndFeelClassName();
System.out.println(lookAndFeel);
UIManager.setLookAndFeel(lookAndFeel);
}
catch(Exception e)
{
System.out.println("couldn't get that LookAndFeel");
}
Scenario1Panel mgr = new Scenario1Panel();
JFrame frame = new JFrame();
frame.add(mgr);
frame.pack();
frame.setVisible(true);
}
Run Code Online (Sandbox Code Playgroud)
}
我的树代码是:
import javax.swing.JScrollPane;
import …Run Code Online (Sandbox Code Playgroud) 我正在使用Swing并在我的GUI中有一个JTree.在执行期间,我解析树的节点以确定要执行的操作.这是一个片段:
// action to modify node
public void modifyMenuItem(DefaultMutableTreeNode node)
{
// if node is node 1 in the tree
if(node.equals(treeNodes.node1))
{
// perform action 1
}
// if node is node 2 in the tree
else if(node.equals(treeNodes.node2))
{
// perform action 2
}
// if node is node 3 in the tree
else if(node.equals(treeNodes.node3))
{
// perform action 3
}
etc.
}
Run Code Online (Sandbox Code Playgroud)
问题是,我的树中有近50个节点,我担心通过这种类型的实现我真的会损害性能.我的代码中有类似的if语句.处理像这样的大型if语句的首选方法是什么?显然我不能使用switch语句,因为它们不是Integer值,所以我应该创建一个Hashmap然后使用基于Hash键的开关吗?