首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内容不限于JPanel

问内容不限于JPanel
EN

Stack Overflow用户
提问于 2014-03-29 00:03:46
回答 1查看 101关注 0票数 0

我在JavaFX项目中的Anchor Pane中有一个JPanel。我遇到的问题是,在面板中加载的内容并不局限于面板,一旦文本到达面板的边缘,它就会切断文本,而不是移到下一行。

但是,如果我在Jframe中测试面板,这是很好的。

锚定面板是使用JavaFX场景生成器创建并放置在用户界面中的。下面的代码是我制作各种字体大小的标签的地方(这是为了创建一个单词云),并将它们放在一个JPanel中,然后返回这个面板。

代码语言:javascript
复制
public JPanel nnsePairWordCloud() throws SQLException, InstantiationException, IllegalAccessException {
Database databaseConnection = new Database();
databaseConnection.getConnection();
ResultSet nnsePairs = databaseConnection.getNNSEPairInfoFromDatabase();
ResultSet nnseScores = databaseConnection.getNNSESimilarityResultsFromDatabase();

//adding words from the database to the array that will make up the word cloud
while(nnsePairs.next()) {
    String wordPair = nnsePairs.getString(1);
    WORDS.add(wordPair);
}

//adding each pairs weighting from the database - this will determine the size of the word
while(nnseScores.next()) {
    Double wordResult = nnseScores.getDouble(1);
    WEIGHTINGS.add(wordResult);
}
System.out.println("cloud data got");

  JPanel panel = new JPanel();
    panel.setSize(380, 275);
    Cloud cloud = new Cloud();
   // cloud.setMinWeight(-1);
    //cloud.setMaxWeight(1);
    cloud.setMaxTagsToDisplay(300);
    //Random random = new Random();
    for (int i =0; i<WORDS.size(); i++) {
            cloud.addTag(new Tag(WORDS.get(i), WEIGHTINGS.get(i)));
    }
    for (Tag tag : cloud.tags()) {
        final JLabel label = new JLabel(tag.getName());
        label.setOpaque(false);
        label.setFont(label.getFont().deriveFont((float) tag.getWeight() * 10));
        panel.add(label);
    }
    //frame.add(panel);
    //frame.setSize(800, 600);
    //frame.setVisible(true);
    return panel;

}

下面是返回并设置面板的代码--首先创建一个SwingNode,然后加载内容。我必须这样做,这样才能在JavaFX UI中加载内容。

代码语言:javascript
复制
final SwingNode nodeForWordCloud = new SwingNode();
    createAndSetSwingContentForWordCloud(nodeForWordCloud);
    wordCloudBox.getChildren().add(nodeForWordCloud);

 private void createAndSetSwingContentForWordCloud(final SwingNode swingNode) {
         SwingUtilities.invokeLater(new Runnable() {
             @Override
             public void run() {
                 try {
                     swingNode.setContent(new WordCloud().initUI());
                 } catch (SQLException ex) {
                     Logger.getLogger(WordNetPairPageController.class.getName()).log(Level.SEVERE, null, ex);
                 } catch (InstantiationException ex) {
                     Logger.getLogger(WordNetPairPageController.class.getName()).log(Level.SEVERE, null, ex);
                 } catch (IllegalAccessException ex) {
                     Logger.getLogger(WordNetPairPageController.class.getName()).log(Level.SEVERE, null, ex);
                 }
             }
         });
     }
EN

回答 1

Stack Overflow用户

发布于 2014-04-01 00:21:31

我想通了。

如果我使用JavaFX FlowPane,那么它解决了我所遇到的两个问题。内容现在在窗格中流动,并且不会中断,并且内容直接加载,因为它不再是swing组件,因此它不必在单独的线程上运行。

任何有类似问题的人都可以查看Java FX中的不同布局是如何工作的,因为这将帮助您找出使用哪种布局。这些面板的工作方式与Swing中的非常不同。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22717779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档