小编Mat*_*att的帖子

将JTable动态添加到JScrollPane

当用户提示我这样做时,我想要填充一个表.问题是,我无法预测表最终会有多少行.在我的面板的构造函数中,我将显示表

    // 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里面没有桌子的轮廓.为什么不显示表格以及如何修复它?

java swing jtable jscrollpane

6
推荐指数
2
解决办法
1万
查看次数

动态更改JTree中特定节点的图标

我已经看到很多在树实例化期间更改节点图标的示例,但我想要一种方法来稍后动态更改单个节点的图标.所以,在我的主代码中,我将自定义渲染器添加到我的树中:

// 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)

java icons swing renderer jtree

4
推荐指数
1
解决办法
1万
查看次数

Perl TCP Server处理多个客户端连接

我将在前言中说我对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)

perl multithreading tcp

3
推荐指数
1
解决办法
1万
查看次数

JTree不显示添加的节点

我正在尝试创建我的第一个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)

java swing treenode jtree

1
推荐指数
2
解决办法
2210
查看次数

在Java中编写对象的大型if-else语句的最佳方法?

我正在使用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键的开关吗?

java swing if-statement hashmap

0
推荐指数
1
解决办法
238
查看次数