Search Results

Search found 26 results on 2 pages for 'jlabels'.

Page 1/2 | 1 2  | Next Page >

  • Using JLabels as pseudo buttons.

    - by FreeThinker
    Currently I am developing a small todo list manager and would like to use labels in place of buttons on the 'context' bar. If any one could provide me with information on how I could go about doing this I would appreciate it greatly.

    Read the article

  • Java Swing- Create a function to add elements to JScrollPanel

    - by battousai622
    I want to create a function so that i can call add JLabel's, etc inside the JScrollPanel. I am not sure what the command is in NetBeans. I tried doing JScrollPanel - events - container - componentAdded to create the code below. But nothing shows up when i add code to that function. private void initComponents() { scrollPanel = new javax.swing.JScrollPane(); scrollPanel.addContainerListener(new java.awt.event.ContainerAdapter() { public void componentAdded(java.awt.event.ContainerEvent evt) { scrollPanelComponentAdded(evt); } } private void scrollPanelComponentAdded(java.awt.event.ContainerEvent evt) { System.out.println("main"); } Any help would be great, thanks.

    Read the article

  • Running Boggle Solver takes over an hour to run. What is wrong with my code?

    - by user1872912
    So I am running a Boggle Solver in java on the NetBeans IDE. When I run it, i have to quit after 10 minutes or so because it will end up taking about 2 hour to run completely. Is there something wrong with my code or a way that will make is substantially faster? public void findWords(String word, int iLoc, int jLoc, ArrayList<JLabel> labelsUsed){ if(iLoc < 0 || iLoc >= 4 || jLoc < 0 || jLoc >= 4){ return; } if(labelsUsed.contains(jLabels[iLoc][jLoc])){ return; } word += jLabels[iLoc][jLoc].getText(); labelsUsed.add(jLabels[iLoc][jLoc]); if(word.length() >= 3 && wordsPossible.contains(word)){ wordsMade.add(word); } findWords(word, iLoc-1, jLoc, labelsUsed); findWords(word, iLoc+1, jLoc, labelsUsed); findWords(word, iLoc, jLoc-1, labelsUsed); findWords(word, iLoc, jLoc+1, labelsUsed); findWords(word, iLoc-1, jLoc+1, labelsUsed); findWords(word, iLoc-1, jLoc-1, labelsUsed); findWords(word, iLoc+1, jLoc-1, labelsUsed); findWords(word, iLoc+1, jLoc+1, labelsUsed); labelsUsed.remove(jLabels[iLoc][jLoc]); } here is where I call this method from: public void findWords(){ ArrayList <JLabel> labelsUsed = new ArrayList<JLabel>(); for(int i=0; i<jLabels.length; i++){ for(int j=0; j<jLabels[i].length; j++){ findWords(jLabels[i][j].getText(), i, j, labelsUsed); //System.out.println("Done"); } } } edit: BTW I am using a GUI and the letters on the board are displayed by using a JLabel.

    Read the article

  • JLabel not greyed out when disabled, when HTML text displayed

    - by bguiz
    How do I get a JLabel displaying a HTML string to appear greyed out (which is the behaviour of JLabels that don't display HTML text)? Is there another way than actually changing the colour myself by modifying the foreground property? JLabel label1 = new JLabel("Normal text"); JLabel label2 = new JLabel("<html>HTML <b>text</b>"); // Both labels are now black in colour label1.setEnabled(false); label2.setEnabled(false); // label1 is greyed out, label2 is still black in colour Thank you very much for all of your responses. From what I gather, it seems that Java doesn't support automatic greying out of JLabels when they use HTML text. Suraj's solution has come closest to the fix considering the limitations. I have however, tried a different out-of-the box approach, where I have put the HTML text JLabels inside of an inner JPanel and did this: mInnerPanel.setEnabled(shouldShow); //shouldShow is a boolean value Which hasn't worked. Any suggestions for this way? EDIT: Added implemented solution.

    Read the article

  • Revalidate and repaint - Java Swing

    - by bosra
    I have a JPanel that I am adding JLabel's to. I then want to remove all the JLabels and add some new ones. So I do the following: panel.removeAll();panel.repaint(); panel.add(new JLabel("Add something new"); panel.revalidate(); This works fine. My problem arises when I start a new thread after this like: panel.removeAll();panel.repaint(); (1)panel.add(new JLabel("Add something new"); panel.revalidate(); //new thread to start - this thread creates new JLabels that should appear under (1) firstProducer.start(); try { firstProducer.join(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } Then the output from the original JLabels is still visible. I have read that the revalidate process is a long running task and hence the firstProducer thread is getting started while the revalidation is going on and a conflict is arising. What is the best way to deal with this?

    Read the article

  • JLabel not displaying all the characters even after dynamically changing font size

    - by wniroshan
    Hi all, I am trying to fit a sentence that changes often, in to a few jlabels. Widths of my 3 jlabels stay unchanged all the time. What I am doing is changing the font size so all the characters can fit with out non being out of the display range of the labels. What I do is call below code snippet when ever sentence is changed. Here is my code String sentence = "Some long sentence"; int SentenceLength = sentence.length(); int FontSize = 0; // sum of widths of the three labels int TotalLblLength=lbl_0ValueInWords.getWidth()+lbl_1ValueInWords.getWidth()+lbl_1ValueInWords.getWidth(); /*decide the font size so that all the characters can be displayed with out exceeding the display renge(horizontal) of the 3 labels Inconsolata -> monopace font font size == width of the font*2 (something I observed, not sure if this is true always) */ FontSize=(TotalLblLength/SentenceLength)*2; // max font size is 20 - based on label height FontSize=(FontSize>20)?20:FontSize; lbl_0ValueInWords.setFont(new java.awt.Font("Inconsolata", 0,FontSize)); lbl_1ValueInWords.setFont(new java.awt.Font("Inconsolata", 0,FontSize)); lbl_2ValueInWords.setFont(new java.awt.Font("Inconsolata", 0,FontSize)); int CharCount_lbl0 = width_lbl0 / (FontSize / 2); int CharCount_lbl1 = width_lbl1 / (FontSize / 2); int CharsCount_lbl2 = width_lbl2 / (FontSize / 2); /*Set texts of each label if sentence has more than the number of characters that can fit in the 1st label, excessive characters are moved to the 2nd label. same goes for the 2nd and 3rd labels*/ if (SentenceLength > CharCount_lbl0) { lbl_0ValueInWords.setText(sentence.substring(0, CharCount_lbl0)); if (SentenceLength > CharCount_lbl0 + CharCount_lbl1) { lbl_1ValueInWords.setText(sentence.substring(CharCount_lbl0, CharCount_lbl0 + CharCount_lbl1)); lbl_2ValueInWords.setText(sentence.substring(CharCount_lbl0 + CharCount_lbl1, SentenceLength)); } else { lbl_1ValueInWords.setText(sentence.substring(CharCount_lbl0, SentenceLength)); } } else { lbl_0ValueInWords.setText(sentence); } But even after resetting font size sometimes the last character goes out of the display range. I have removed margines from the jlabels that may cause this. This happens for random length sentences. I can solve the problem for the application by reducing label width used for the calculations(hopefully) Can anyone explain me the reason? Could be because of some defect in the fonts symmetry?

    Read the article

  • JLabel animation in JPanel

    - by Trizicus
    After scratching around I found that it's best to implement a custom image component by extending a JLabel. So far that has worked great as I can add multiple "images" (jlabels without the layout breaking. I just have a question that I hope someone can answer for me. I noticed that in order to animate JLabels across the screen I need to setlayout(null); and setbounds of the component and then to animate eventually setlocation(x,y);. Is this a best practice or a terrible way to animate a component? I plan on eventually making an animation class but I don't want to do so and end up having to chuck it. I have included relevant code for a quick review check. import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JPanel; import javax.swing.Timer; public class GraphicsPanel extends JPanel { private Timer timer; private long startTime = 0; private int numFrames = 0; private float fps = 0.0f; private int x = 0; GraphicsPanel() { final Entity ent1 = new Entity(); ent1.setBounds(x, 0, ent1.getWidth(), ent1.getHeight()); add(ent1); //ESSENTIAL setLayout(null); //GAMELOOP timer = new Timer(30, new ActionListener() { public void actionPerformed(ActionEvent e) { getFPS(); incX(); ent1.setLocation(x, 0); repaint(); } }); timer.start(); } public void incX() { x++; } @Override public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2 = (Graphics2D) g.create(); g2.setClip(0, 0, getWidth(), getHeight()); g2.setColor(Color.BLACK); g2.drawString("FPS: " + fps, 1, 15); } public void getFPS() { ++numFrames; if (startTime == 0) { startTime = System.currentTimeMillis(); } else { long currentTime = System.currentTimeMillis(); long delta = (currentTime - startTime); if (delta > 1000) { fps = (numFrames * 1000) / delta; numFrames = 0; startTime = currentTime; } } } } Thank you!

    Read the article

  • java simple JPanel management (see screenshot)

    - by Allen
    I have a JPanel that encapsulates two JPanels, one on top of the other. The first holds two JLabels which hold the playing cards. The second holds the player's text (name and score). However, when I remove the player's cards, the lower JPanel moves up to the top, which i would prefer that it not do. Is there a way to keep it in place regardless of whether the top JPanel is occupied or not? Thanks

    Read the article

  • Java MouseListener

    - by ikurtz
    I have a bunch of JLabels and i would like to trap mouse click events. at the moment i am having to use: public void mouseClicked(MouseEvent arg0) { } public void mouseExited(MouseEvent arg0) { } public void mouseEntered(MouseEvent arg0) { } public void mousePressed(MouseEvent arg0) { } public void mouseReleased(MouseEvent arg0) { System.out.println("Welcome to Java Programming!"); } I was wondering if there is a tidier way of doing this instead of having a bunch of events I do not wish trap?

    Read the article

  • Simple popup java form with at least two fields

    - by nunos
    This is, I suppose, a very simple question for any Java programmer. My question is as simple as this: When the user clicks a button, I want to show a popup form that should have at least two JTextFields and two JLabels, so using JOptionPane.showInputDialog is not a possibility. Thanks.

    Read the article

  • How to center elements in the BoxLayout using center of the element?

    - by Roman
    I use outputPanel.setLayout(new BoxLayout(outputPanel, BoxLayout.Y_AXIS)); and then I add elements (for example JLabels, JButtons) to the outputPanel. For example: outputPanel.add(submitButton);. I see that all added elements are "centered". It is good, because I do want my elements to be in the center. When I write "center" I mean "equal distance from left and right". But the problem is that the left part of the element is put into the center. And I want to have center of elements to be put into the center. How can I get this behavior?

    Read the article

  • Manage multiple Jlabel's events

    - by IMAnis_tn
    I have a left Panel with multiples Jlabels which i use them as buttons to change a Main Panel's content which is layouted with a CardLayout. I cant work perfectly with these events: mouseEntered : to make highlight effect to the jlabel mouseExited : to take off the highlight effect. mouseClicked : to change the content of the main Panel and start some threads The problem here that can't found an event or a method tell me that another Jlabel has been clicked so i can stop my threads started in the mouseClicked event, OR an event or method tell me that a JPanel in the CardLayout has been displayed or hidden.

    Read the article

  • tiled images in swing

    - by sasquatch90
    I have task to prepare two windows with swing. One contains grid of squares, with random numbers in them. In second I need to load pieces of tiled image and then show them in the correct order, forming tiled image. Windows should look like this : http://img535.imageshack.us/img535/3129/lab8a.jpg Okay so how to bite this ? I've used swing only few times to draw some 2d polylines, so basically I just theoretically now what to do. Ok, so window number 1: I start with creating Jframe for the window. Then I do for loop and in it create 16 JLabels with random numbers in them ? How to set margins between each tile and the whole window ? Window number 2 : So I start the same, but instead of loading numbers I add images ? Now, how can I load image from file and then set it as background ?

    Read the article

  • How to force an HTML JLabel in a JTree to resize when the font changes

    - by Mike
    I'm updating a Java Swing application to support the user switching the app's font from normal size to a larger size (so the user can switch between the two sizes at runtime). One problem I'm having is with a JTree that uses HTML for the tree nodes to underline the text in some nodes (the HTML is just embedded in the JLabel of each tree node). One extra thing to know about the nodes is that they're a custom component, adding a JCheckBox in front of each JLabel. The problem is that once the JTree is visible, increasing the font size causes the nodes (containing underlined text) to not resize. The HTML for those nodes seems to prevent the node from becoming wider, so when the font changes, the text becomes truncated. I think my options are to either: 1) use another approach to make the text underlined, since removing the HTML from the JLabel causes it to resize properly when the font size changes, or 2) keep the HTML formatting and somehow force the JTree/JLabels to resize when the font size is updated (possibly by firing a property change event?). The code already calls SwingUtilities.updateComponentTreeUI() on the parent JFrame when the font size gets updated. Any help would be greatly appreciated. Thanks in advance! -Mike

    Read the article

  • suggestions for declarative GUI programming in Java

    - by Jason S
    I wonder if there are any suggestions for declarative GUI programming in Java. (I abhor visual-based GUI creator/editor software, but am getting a little tired of manually instantiating JPanels and Boxes and JLabels and JLists etc.) That's my overall question, but I have two specific questions for approaches I'm thinking of taking: JavaFX: is there an example somewhere of a realistic GUI display (e.g. not circles and rectangles, but listboxes and buttons and labels and the like) in JavaFX, which can interface with a Java sourcefile that accesses and updates various elements? Plain Old Swing with something to parse XUL-ish XML: has anyone invented a declarative syntax (like XUL) for XML for use with Java Swing? I suppose it wouldn't be hard to do, to create some code based on STaX which reads an XML file, instantiates a hierarchy of Swing elements, and makes the hierarchy accessible through some kind of object model. But I'd rather use something that's well-known and documented and tested than to try to invent such a thing myself. JGoodies Forms -- not exactly declarative, but kinda close & I've had good luck with JGoodies Binding. But their syntax for Form Layout seems kinda cryptic. edit: lots of great answers here! (& I added #3 above) I'd be especially grateful for hearing any experiences any of you have had with using one of these frameworks for real-world applications. p.s. I did try a few google searches ("java gui declarative"), just didn't quite know what to look for.

    Read the article

  • Why is this JLabel continuously repainting?

    - by Morinar
    I've got an item that appears to continuously repaint when it exists, causing the CPU to spike whenever it is in any of my windows. It directly inherits from a JLabel, and unlike the other JLabels on the screen, it has a red background and a border. I have NO idea why it would be different enough to continuously repaint. The callstack looks like this: Thread [AWT-EventQueue-1] (Suspended (breakpoint at line 260 in sItem)) sItem.paint(Graphics) line: 260 sItem(JComponent).paintToOffscreen(Graphics, int, int, int, int, int, int) line: 5124 RepaintManager$PaintManager.paintDoubleBuffered(JComponent, Image, Graphics, int, int, int, int) line: 1475 RepaintManager$PaintManager.paint(JComponent, JComponent, Graphics, int, int, int, int) line: 1406 RepaintManager.paint(JComponent, JComponent, Graphics, int, int, int, int) line: 1220 sItem(JComponent)._paintImmediately(int, int, int, int) line: 5072 sItem(JComponent).paintImmediately(int, int, int, int) line: 4882 RepaintManager.paintDirtyRegions(Map<Component,Rectangle>) line: 803 RepaintManager.paintDirtyRegions() line: 714 RepaintManager.seqPaintDirtyRegions() line: 694 [local variables unavailable] SystemEventQueueUtilities$ComponentWorkRequest.run() line: 128 InvocationEvent.dispatch() line: 209 summitEventQueue(EventQueue).dispatchEvent(AWTEvent) line: 597 summitEventQueue(SummitHackableEventQueue).dispatchEvent(AWTEvent) line: 26 summitEventQueue.dispatchEvent(AWTEvent) line: 62 EventDispatchThread.pumpOneEventForFilters(int) line: 269 EventDispatchThread.pumpEventsForFilter(int, Conditional, EventFilter) line: 184 EventDispatchThread.pumpEventsForHierarchy(int, Conditional, Component) line: 174 EventDispatchThread.pumpEvents(int, Conditional) line: 169 EventDispatchThread.pumpEvents(Conditional) line: 161 EventDispatchThread.run() line: 122 [local variables unavailable] It basically just continually hits that over and over again as fast as I can press continue. The code that is "unique" to this particular label looks approximately like this: bgColor = OurColors.clrWindowTextAlert; textColor = Color.white; setBackground(bgColor); setOpaque(true); setSize(150, getHeight()); Border border_warning = BorderFactory.createCompoundBorder( BorderFactory.createMatteBorder(1, 1, 1, 1, OurColors.clrXBoxBorder), Global.border_left_margin); setBorder(border_warning); It obviously does more, but that particular block only exists for these labels that are causing the spike/continuous repaint. Any ideas why it would keep repainting this particular label?

    Read the article

  • Adding an unknown number of JComponents to a JPanel

    - by Matthew
    Good day, I am building an Applet (JApplet to be exact) and I sub divided that into two panels. The top panel is called DisplayPanel which is a custom class that extends JPanel. The bottom panel is called InputPanel which also extends JPanel. As mentioned above, I can add those two Panel's to the applet and they display fine. The next thing that I would like to do is have the InputPanel be able to hold a random number of JComponent Objects all listed veritcally. This means that the InputPanel should be able to have JButtons, JLabels, JTextFields etc thrown at it. I then want the InputPanel to display some sort of scrolling capability. The catch is that since these two panels are already inside my applet, I need the InputPanel to stay the same size as it was given when added to the Applet. So for example, if my applet (from the web-browser html code) was given the size 700,700, and then the DisplayPanel was 700 by 350, and the InputPanel was below it with the same dimensions, I want to then be able to add lots of JComponents like buttons, to the InputPanel and the panel would stay 700 x 350 in the same position that it is at, only the panel would have scroll bars if needed. I've played with many different combinations of JScrollPane, but just cannot get it. Thank you.

    Read the article

  • How do I detect the colillison of components?

    - by Coupon22
    How do I detect the collision of components, specifically JLabels (or ImageIcons?)?I have tried this: add(test1); test1.setLocation(x, y); add(test2); test1.setLocation(x1, y1); validate(); if(intersects(test1, test2)) { ehealth-=50; } public boolean intersects(JLabel testa, JLabel testb) { boolean b3 = false; if(testa.contains(testb.getX(), testb.getY())) { b3 = true; } return b3; } When I run this, it does nothing! I used to use rectangle, but it didn't go well with me. I was thinking about an image with a border (using paint.net) and moving an imageicon, but I don't know how to get the x of an imageicon or detect collision. I don't know how to detect collision of a label or increase the location either. I have searched for collision detection with components/ImageIcons, but nothing has came up. I have also searched for getting the x of ImageIcons.

    Read the article

  • chess board in java

    - by ranzy
    This is my code below import javax.swing.*; import java.awt.*; public class board2 { JFrame frame; JPanel squares[][] = new JPanel[8][8]; public board2() { frame = new JFrame("Simplified Chess"); frame.setSize(500, 500); frame.setLayout(new GridLayout(8, 8)); for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { squares[i][j] = new JPanel(); if ((i + j) % 2 == 0) { squares[i][j].setBackground(Color.black); } else { squares[i][j].setBackground(Color.white); } frame.add(squares[i][j]); } } squares[0][0].add(new JLabel(new ImageIcon("rookgreen.png"))); squares[0][2].add(new JLabel(new ImageIcon("bishopgreen.png"))); squares[0][4].add(new JLabel(new ImageIcon("kinggreen.png"))); squares[0][5].add(new JLabel(new ImageIcon("bishopgreen.png"))); squares[0][7].add(new JLabel(new ImageIcon("rookgreen.png"))); squares[7][0].add(new JLabel(new ImageIcon("rookred.png"))); squares[7][2].add(new JLabel(new ImageIcon("bishopred.png"))); squares[7][4].add(new JLabel(new ImageIcon("kingred.png"))); squares[7][5].add(new JLabel(new ImageIcon("bishopred.png"))); squares[7][7].add(new JLabel(new ImageIcon("rookred.png"))); for (int i = 0; i < 8; i++) { squares[1][i].add(new JLabel(new ImageIcon("pawngreen.png"))); squares[6][i].add(new JLabel(new ImageIcon("pawnred.png"))); } frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } public static void main(String[] args) { new board2(); } } I am trying to create a chess game sort of and I need help with putting labels on all sides of the board to label the rows and columns in either A-H or 1-8. I have no idea how to do it. Also later on I'll be adding a feature to drag and drop the pieces. Is it best to use JLabels? Anyways I would I go about putting the labels on the side? Thanks!

    Read the article

  • JButton Image Ignoring GridBagConstraints

    - by daemor
    I am working on an application and have a screen that needs to have elements (namely some custom JButtons) appear and disappear based on a user selection. However for some reason, when I add these buttons to their pane, the buttton image goes to the top corner, and leaves the text in the center, completely ignoring GridBagConstraints. I am completely stumped on this one as I have done this same exact thing dozens of times earlier in the program without any issues. Here is an image of the problem: The problem is in this method here, and occurs down towards the bottom. public void init(){ contentPane.removeAll(); // Setup jlabels JLabel countyLabel = new JLabel("County"); countyLabel.setFont(new Font("Times New Roman", Font.PLAIN, 18)); JLabel measureByLabel = new JLabel("Measure By: "); measureByLabel.setFont(new Font("Times New Roman", Font.PLAIN, 18)); String[] countyChoices = {"Washtenaw", "Oakland", "Livingston"}; // setup components JComboBox<String> countyCombo = new JComboBox<String>(countyChoices); // place baseComponents c.weightx = 0.5; c.weighty = 0.5; c.gridx = 0; c.gridy = 0; c.anchor = GridBagConstraints.NORTH; contentPane.add(countyLabel, c); c.gridx = 2; contentPane.add(countyCombo, c); c.gridy = 1; c.gridx = 0; contentPane.add(trenchButton, c); c.gridx = 2; contentPane.add(bedButton, c); c.gridy = 2; c.gridx = 1; contentPane.add(systemSelection, c); c.gridy = 3; c.gridx = 0; contentPane.add(lengthButton, c); c.fill = GridBagConstraints.BOTH; c.gridwidth = 4; c.gridy = 4; c.gridx = 0; contentPane.add(choicePane, c); GridBagConstraints con = new GridBagConstraints(); con.weightx = 0.5; con.weighty = 0.5; con.gridx = 0; con.gridy = 0; choicePane.add(lengthButton, c); // revalidate and repaint choicePane.revalidate(); choicePane.repaint(); contentPane.revalidate(); contentPane.repaint(); } I have tried doing this in separate methods, the button looks fine when added to the contentPane, the pane is for sure set to gridbagconstraints as I used the expression JPanel choicePane = new JPanel(new GridBagLayout()) to initialize it.

    Read the article

  • Line up swing components by edges

    - by rasen58
    Is it possible to line up swing components? The components are in separate panels which both use flow layout. These two panels are in another panel which is using a grid layout. As you can see there is a subtle difference and I find it annoying. I know that all of the jlabels [the rectangles in blue/purple all have the same size, so i think it might be because of the '+' and '*', but I'm not sure because the left sides of the first two boxes aren't lined up. the panels JPanel panel2 = new JPanel(new GridLayout(4, 1)); JPanel panel2a = new JPanel(new FlowLayout()); JPanel panel2b = new JPanel(new FlowLayout()); the first two rectangles (purple) add1 = new JLabel("", JLabel.CENTER); add1.setTransferHandler(new TransferHandler("text")); add1.setBorder(b2); add2 = new JLabel("", JLabel.CENTER); add2.setTransferHandler(new TransferHandler("text")); add2.setBorder(b2); the two blue rectangles textFieldA = new JTextField(); textFieldA.setHorizontalAlignment(JTextField.CENTER); textFieldA.setEditable(false); textFieldA.setBorder(new LineBorder(Color.blue)); textFieldM = new JTextField(); textFieldM.setHorizontalAlignment(JTextField.CENTER); textFieldM.setEditable(false); textFieldM.setBorder(new LineBorder(Color.blue)); the + and * opA = new JLabel("+", JLabel.CENTER); opS = new JLabel("*", JLabel.CENTER); Showing that the rectangles are the same size Dimension d = card1.getPreferredSize(); int width = d.width + 100; int height = d.height + 50; add1.setPreferredSize(new Dimension(width, height)); add2.setPreferredSize(new Dimension(width, height)); mult1.setPreferredSize(new Dimension(width, height)); mult2.setPreferredSize(new Dimension(width, height)); textFieldA.setPreferredSize(new Dimension(width, height)); textFieldM.setPreferredSize(new Dimension(width, height)); Adding to the panels panel2a.add(add1); panel2a.add(opA); panel2a.add(add2); panel2a.add(enterA); panel2a.add(textFieldA); panel2c.add(mult1); panel2c.add(opM); panel2c.add(mult2); panel2c.add(enterM); panel2c.add(textFieldM); panel2.add(panel2a); panel2.add(panel2c);

    Read the article

  • JScrollPane content to image

    - by Sebastian Ikaros Rizzo
    I'm trying to save the main viewport and headers of a JScrollPane (larger than screen) to PNG image files. I created 3 classes extending JPanel (MainTablePanel, MapsHeaderPanel and ItemsHeaderPanel) and set them to the viewports. Each of them has this method: public BufferedImage createImage() { BufferedImage bi = new BufferedImage(getSize().width, getSize().height, BufferedImage.TYPE_INT_ARGB); Graphics g = bi.createGraphics(); paint(g); g.dispose(); return bi; } Each class has also a paint method, which paints the background and then call the super.paint() to paint some label. For example: public void paint(Graphics g){ g.setColor(Color.BLACK); g.fillRect(0, 0, getWidth(), getHeight()); g.setColor(new Color(255, 255, 0, 50)); // for loop that paints some vertical yellow lines for(int i=0; i<getWidth(); i+=K.mW){ g.fillRect(i-1, 0, 2, getHeight()); if(i%(K.mW*5)==0){ g.fillRect(i-2, 0, 4, getHeight()); } } // called to pain some rotated JLabels super.paint(g); } From an external JFrame I then tried to save them to PNG file, using this code: BufferedImage tableImg = mainTableP.createImage(); BufferedImage topImg = mapsHeaderP.createImage(); BufferedImage leftImg = itemsHeaderP.createImage(); ImageIO.write(tableImg, "png", new File(s.homeDir+"/table.png")); ImageIO.write(topImg, "png", new File(s.homeDir+"/top.png")); ImageIO.write(leftImg, "png", new File(s.homeDir+"/left.png")); This is a screenshot of the application running: screenshot And this is the header exported: top If I comment the "super.paint(g)" instruction, I obtain a correct image (thus without all JLables, clearly). It seems like the second paint (super.paint(g)) is painted shifted into the BufferedImage and taking elements outside its JPanel. Somebody could explain me this behaviour? Thank you. ========== EDIT for SSCCE ==================================== This should compile. You can execute it as it is, and in c:\ you'll find two images (top.png and left.png) that should be the same as the two headers. Unfortunately, they are not. Background is not painted. Moreover (especially if you look at left.png) you can see that the labels are painted twice and shifted (note, for example, "Left test 21"). import java.awt.*; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; import javax.swing.*; public class Main { public static void main(String[] args) { JFrame frame = new JFrame(); frame.setLayout(null); frame.setSize(800, 600); JScrollPane scrollP = new JScrollPane(); scrollP.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); scrollP.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); MyPanel top = new MyPanel(); for(int i=0; i<30; i++){ JLabel label = new JLabel("Test "+i); label.setOpaque(false); label.setBounds(50*i, 40, 50, 20); label.setForeground(Color.GREEN); top.add(label); } top.setLayout(null); top.setOpaque(false); top.setPreferredSize(new Dimension(50*30, 200)); top.validate(); MyPanel left = new MyPanel(); for(int i=0; i<30; i++){ JLabel label = new JLabel("Left test "+i); label.setBounds(0, 50*i, 100, 20); label.setForeground(Color.RED); left.add(label); } left.setLayout(null); left.setOpaque(false); left.setPreferredSize(new Dimension(200, 50*30)); MyPanel center = new MyPanel(); center.setLayout(null); center.setOpaque(false); center.setPreferredSize(new Dimension(50*30, 50*30)); scrollP.setViewportView(center); scrollP.setColumnHeaderView(top); scrollP.setRowHeaderView(left); scrollP.setBounds(0, 50, 750, 500); frame.add(scrollP); frame.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); frame.setVisible(true); try{ BufferedImage topImg = top.createImage(); ImageIO.write(topImg, "png", new File("C:/top.png")); BufferedImage leftImg = left.createImage(); ImageIO.write(leftImg, "png", new File("C:/left.png")); }catch(Exception e){ e.printStackTrace(); } } } class MyPanel extends JPanel{ public void paint(Graphics g){ g.setColor(Color.BLACK); g.fillRect(0, 0, getWidth(), getHeight()); g.setColor(new Color(255, 255, 0, 50)); for(int i=0; i<getWidth(); i+=50){ g.fillRect(i-1, 0, 2, getHeight()); } super.paint(g); // COMMENT this line to obtain background images } public BufferedImage createImage() { BufferedImage bi = new BufferedImage(getSize().width, getSize().height, BufferedImage.TYPE_INT_ARGB); Graphics g = bi.createGraphics(); paint(g); g.dispose(); return bi; } }

    Read the article

1 2  | Next Page >