GridbagLayout - how to get the size of a gridbag cell?
Hi,
i'd like to create a swing widget that automatically rescales the labels inside according to its cell size.
Therefore i had the idea to get the cell size and set the font size according to this size ( subtracting some inset )
finally it should look like that:
| title text |
| val1 | val2 |
| val3 | val4 |
-----------------------the title needs to span 2 cells horizontal,
the values (valx) span 1 cell
by resizing the mainPanel, the labels should also resize according to their available space.
i use this code by now for setting up the widget.
// title label
GridBagConstraints gBC_title = new GridBagConstraints();
jl_title.setFont(titleFont);
gBC_title.gridx = 0;
gBC_title.gridy = 0;
gBC_title.gridwidth = 2; // grid spanning
gBC_title.weightx = 1;
gBC_title.weighty = 0.2;
gBC_title.anchor = GridBagConstraints.CENTER;
gBC_title.fill = GridBagConstraints.BOTH;
mainPanel.add(jl_title, gBC_title);
//one of the value labels
GridBagConstraints gBC_v1 = new GridBagConstraints();
jl_val1.setFont(valueFont);
gBC_v1.weightx = 0.5;
gBC_v1.weighty = 0.4;
gBC_v1.gridx = 0;
gBC_v1.gridy = 1;
gBC_v1.anchor = GridBagConstraints.LINE_END;
gBC_v1.fill = GridBagConstraints.BOTH;
mainPanel.add(jl_val1, gBC_v1);
(...) The mainPanel is the panel with the Gridbaglayout.
by resizing the widget i call this method:
public void adjustFontSize(JLabel label){
int adjustedFontSize;
int inset = 2; // space surrounding the label
int parentHeight = label.getHeight();
int parentWidth = label.getWidth();
// System.out.println("available space for "+label.getText()+": "+ parentWidth +"*"+ parentHeight);
if (parentHeight <= parentWidth){
adjustedFontSize = parentHeight - inset;
} else {
adjustedFontSize = parentWidth - inset;
label.setFont(new Font(null, Font.BOLD, adjustedFontSize));
System.out.println("adjusting font size for "+label.getText()+": "+adjustedFontSize);
}//end adjustFontSizethe problem is, that the resizing doesn't really work.
any ideas?
the best thing would be to get the parent cell size of the label to resize, and set the font size to allmost this value
, but i am not able to get the cell size to adjust the label or font size:
thanks for your help
Edited by: Sniezn on Mar 12, 2010 1:05 AM
To make this function properly, you may need to create your own layout manager or do something even more hackish.Here's something more hackish. But first, setting GBC anchor with fill=BOTH doesn't have any effect as the component is resized to fill its cell, so might as well be anchored at all the four corners. Also, there's no need to create a new GBC instance for adding each component.
Is this the layout you were looking for?import java.awt.*;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.awt.font.FontRenderContext;
import java.awt.geom.Rectangle2D;
import javax.swing.*;
public class ZoomLabelTest {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new ZoomLabelTest().makeUI();
public void makeUI() {
JLabel labelTitle = new ZoomLabel("title text");
labelTitle.setHorizontalAlignment(JLabel.CENTER);
JLabel labelVal1 = new ZoomLabel("val1");
labelVal1.setHorizontalAlignment(JLabel.RIGHT);
JLabel labelVal2 = new ZoomLabel("val2");
JLabel labelVal3 = new ZoomLabel("val3");
labelVal3.setHorizontalAlignment(JLabel.RIGHT);
JLabel labelVal4 = new ZoomLabel("val4");
JPanel panel = new JPanel(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.BOTH;
gbc.gridwidth = 2;
gbc.gridx = 0;
gbc.gridy = 0;
gbc.weightx = 1;
gbc.weighty = 0.2;
panel.add(labelTitle, gbc);
gbc.gridwidth = 1;
gbc.weightx = 0.5;
gbc.weighty = 0.4;
gbc.gridy = 1;
panel.add(labelVal1, gbc);
gbc.gridx = 1;
panel.add(labelVal2, gbc);
gbc.gridx = 0;
gbc.gridy = 2;
panel.add(labelVal3, gbc);
gbc.gridx = 1;
panel.add(labelVal4, gbc);
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 400);
frame.setLocationRelativeTo(null);
frame.setContentPane(panel);
frame.setVisible(true);
class ZoomLabel extends JLabel {
ComponentListener listener = new ZoomListener();
public ZoomLabel(String text) {
super(text);
addComponentListener(listener);
private class ZoomListener extends ComponentAdapter {
@Override
public void componentResized(ComponentEvent e) {
// doesn't make a difference for GBL but does for some
// other layouts, notably BorderLayout
setPreferredSize(getSize());
Insets insets = getInsets();
Font font = getFont();
int width = getWidth() - insets.left - insets.right;
int height = getHeight() - insets.top - insets.bottom;
boolean increased = false;
boolean decreased = false;
do {
Rectangle2D textRect = font.getStringBounds(getText(),
new FontRenderContext(null, true, false));
int textWidth = (int) textRect.getWidth();
int textHeight = (int) textRect.getHeight();
if (textWidth > width || textHeight > height) {
font = font.deriveFont((float) font.getSize() - 1);
if (increased) {
break;
decreased = true;
} else {
if (decreased) {
break;
font = font.deriveFont((float) font.getSize() + 1);
increased = true;
} while (true);
setFont(font);
}db
PS Now somebody tell me that it's not a good idea to setPreferredSize in componentResized ... along with an alternative that's clean(er) ;-)
edit No, that needs a lot more work to be stable with GBL (or maybe it never will be). It appears to be stable only with the same weightx / weighty for all columns/rows.
Edited by: DarrylBurke
Similar Messages
-
How to get the size of driver[C: or D:]
Hi Friends,
I have a query regarding to java..
I want to get the name of all the drives that r connected to the System including network drives...
and how to get the size of any system drive[For example C: or D: Drive].
I want the output to be displayed like in the following format
Device type size free Usage_Space
for ex.
C: NTFS 37.5Gb 30.5gb 7gb
Output like as linux command df -h
Edited by: KituPrash on Mar 4, 2009 3:29 AMDoes this help for starters?
File[] roots= File.listRoots();
for (int i= 0; i< roots.length; i++)
System.out.println(roots[i]+": "+roots.getTotalSpace());kind regards,
Jos -
How to get the size of physical memory by using system call ?
how to get the size of physical memory by using system call ?What system call can be used for me to get the size of physical memor? thanks.
%vmstat 3
procs memory page disk faults cpu
r b w swap free re mf pi po fr de sr s0 -- -- -- in sy cs us sy id
0 0 0 3025816 994456 4 19 6 0 0 0 0 8 0 0 0 459 253 139 1 1 99
0 0 0 2864688 777408 0 2 0 0 0 0 0 3 0 0 0 428 134 175 0 1 99
0 0 0 2864688 777408 0 0 0 0 0 0 0 7 0 0 0 448 112 166 0 0 100
one interesting observation about vmstat I found out is (mostly on Solaris)
the first line of information always off chart, so I usually do a few interval to get constant result.
if you use linux
just
cat /proc/meminfo -
How to get the size of partition?
The following SQL will get the rows of the fact table & aggregation. But how to get the size (MB) of the partition. select * from $system.discover_partition_stat That should be doable, because in BIDS, we can see the size of a partition, but from which
view we can do that?This is the best bet you have SELECT * FROM SystemRestrictSchema($system.discover_partition_stat ,DATABASE_NAME = 'Adventure Works DW' ,CUBE_NAME = 'Adventure Works' ,MEASURE_GROUP_NAME = 'Internet Sales' ,PARTITION_NAME = 'Internet_Sales_2003') Refer
this article: http://geekswithblogs.net/darrengosbell/archive/2008/12/02/ssas-are-my-aggregations-processed.aspxvinu -
How to get the size of the webpage?
I am designing a program to
analyse the webpage content.
wondering how to get the size of
the webpage including its image's
size and etc. Thanks in advance.As i know , the getContentLength just return
then number of characters of its HTML code.
By knowing the length of the HTML code, is
not possible for me to calculate its download
time... i wonder is there any way to get the
total size of the page including its image size,
applet size, and etc... Thanks : ) -
How to get the size of a hard disk?
Hi,
As above, how to get the size of a hard disk by using Java.
Thanks you!
AlexI would be interested in the answer of this question, too.
In core Java there is no way to find it out in a platform independent manner because of the hardware abstraction of the VM. So my only idea is to write a native library for doing this and colling it via JNI -
How to get the size of the table
Hi All,
How to get the size of the table in Oracle 10g?
Is there any script which needs to be run?
Regards,
ApoorvHi All,
Sorry but somehow the table user_segments is not populated in my case. But we have another table SYS.ALL_TABLES whose structure is given below. Would I be able to calculate the table size based on the columns given below:
ColumnName Data Type
OWNER VARCHAR2 (30 Byte)
TABLE_NAME VARCHAR2 (30 Byte)
TABLESPACE_NAME VARCHAR2 (30 Byte)
CLUSTER_NAME VARCHAR2 (30 Byte)
IOT_NAME VARCHAR2 (30 Byte)
STATUS VARCHAR2 (8 Byte)
PCT_FREE NUMBER
PCT_USED NUMBER
INI_TRANS NUMBER
MAX_TRANS NUMBER
INITIAL_EXTENT NUMBER
NEXT_EXTENT NUMBER
MIN_EXTENTS NUMBER
MAX_EXTENTS NUMBER
PCT_INCREASE NUMBER
FREELISTS NUMBER
FREELIST_GROUPS NUMBER
LOGGING VARCHAR2 (3 Byte)
BACKED_UP VARCHAR2 (1 Byte)
NUM_ROWS NUMBER
BLOCKS NUMBER
EMPTY_BLOCKS NUMBER
AVG_SPACE NUMBER
CHAIN_CNT NUMBER
AVG_ROW_LEN NUMBER
AVG_SPACE_FREELIST_BLOCKS NUMBER
NUM_FREELIST_BLOCKS NUMBER
DEGREE VARCHAR2 (10 Byte)
INSTANCES VARCHAR2 (10 Byte)
CACHE VARCHAR2 (5 Byte)
TABLE_LOCK VARCHAR2 (8 Byte)
SAMPLE_SIZE NUMBER
LAST_ANALYZED DATE
PARTITIONED VARCHAR2 (3 Byte)
IOT_TYPE VARCHAR2 (12 Byte)
TEMPORARY VARCHAR2 (1 Byte)
SECONDARY VARCHAR2 (1 Byte)
NESTED VARCHAR2 (3 Byte)
BUFFER_POOL VARCHAR2 (7 Byte)
ROW_MOVEMENT VARCHAR2 (8 Byte)
GLOBAL_STATS VARCHAR2 (3 Byte)
USER_STATS VARCHAR2 (3 Byte)
DURATION VARCHAR2 (15 Byte)
SKIP_CORRUPT VARCHAR2 (8 Byte)
MONITORING VARCHAR2 (3 Byte)
CLUSTER_OWNER VARCHAR2 (30 Byte)
DEPENDENCIES VARCHAR2 (8 Byte)
COMPRESSION VARCHAR2 (8 Byte)
DROPPED VARCHAR2 (3 Byte) -
How to get the size of the cuurrent illustration
Sorry, I made a mistake before this one. The questios is this: can anybody tell me how can I get the size of the current illustration, (as oposed to the page size) in points. Something like 120 points wide and 87 points High?. What function do I need to call?
From AI Function reference (included with CS2 SDK):
AIDocumentSetup setup;
error = sDocument->GetDocumentSetup(&setup);
if (error) goto processError;
writeDocumentSetup( &setup );
The AIDocumentSetup record returns the following information:
typedef struct {
AIReal width, height;
AIBoolean showPlacedImages;
short pageView;
AIReal outputResolution;
AIBoolean splitLongPaths;
AIBoolean useDefaultScreen;
AIBoolean compatibleGradients;
AIBoolean printTiles;
AIBoolean tileFullPages;
} AIDocumentSetup; -
How to get the size of a file DONE
How can I get the size a file? I want to do the following....
File clobDataFile = new File("clob.dat");
PrintWriter clobpw = new PrintWriter(new BufferedWriter(new FileWriter(clobDataFile)));
int offset = //get the number of chars in the fileOk I am a tard... figured it out...
File clobDataFile = new File("clob.dat");
PrintWriter clobpw = new PrintWriter(new BufferedWriter(new FileWriter(clobDataFile)));
int offset =colbDataFile.length();read API http://java.sun.com/j2se/1.5.0/docs/api/java/io/File.html#length()
next time you have a similar question please refer this document -
How to get the size of the file
Hi All,
I want to get the size of the file in terms of bytes. I used the following code it returns the value in long how can get it in bytes
import java.io.File;
public class ServerBackupCheck {
public static void main(String args[]){
File f = new File("C:/Program Files/Apache Software Foundation/Tomcat 5.5");
System.out.println(f.isDirectory());
System.out.println(f.getTotalSpace());
output:
true
20964163584
regards,
Maheshwaran Devarajif it is a folder you can use this recursive algorithm
public static long recurse(File f) throws IOException
long bytes = 0;
File files[] = f.listFiles();
for(int i =0 ;i<files.length;i++)
File file = files ;
if(file.isFile())
FileInputStream fis = new FileInputStream(file);
byte[] by = new byte[fis.available()];
fis.read(by);
bytes = bytes + by.length;
if(file.isDirectory())
bytes = bytes + recurse(file);
return bytes;
System.out.println(recurse(f)); gives you the total bytes....
Ayberk Cansever .. -
Hi
I want to know the size of the file from Java. ie If i have 10 lines in that file each of 15 characters
then 10 *2*10=200Bytes is the size. How will i get this?
More over, if i am reading the 4 the line, how will get the info that I have read 3 lines =3*2*10= 60 bytes so far?
Regards
SriramThis is from the JavaDocs on java.io.File
length
public long length()
Returns the length of the file denoted by this abstract pathname. The return value is unspecified if this pathname denotes a directory.
Returns:
The length, in bytes, of the file denoted by this abstract pathname, or 0L if the file does not exist
Any of the read methods (except readLine()) on the many stream objects return the number of bytes read, simply accumulate these returns to know how many bytes have been read.
Dave -
How to get the size of JSP html output?
Hi,
Is there a JSP method to get the size of JSP HTML output.
e.g. I would like to print the size of the JSP e.g.
Size of this page is <%=pageContext.getPageSize()%> Kb ???
Any ideas? Thanks.
George
Edited by: googchro on Jan 5, 2010 4:45 PMWould you like to print "the size of this page is..." before or after you calculate the size of the page.
Because adding that bit of text to the page will make the page bigger...
Doing it in java, the best approach would probably to have a filter counting the number of bytes that gets sent to the writer/output stream.
A client side tool measuring the amount of bytes received would probably be easier though.
You can always look at the Content-length header sent with a response. Though you normally don't have access to that on the java/jsp side, as it is sent by the container.
cheers,
evnafets -
How to get the size of the test put in a JPasswordField ?
I've checked all the methods that may allow me to know the size
of the text in a JPasswordField.
I tested getCaretPosition() , getSelectedEnd()
and they don't satisfy me : they give the current position of the cursor
and not the size of the text typed. The only safe method is the use
of the method getText() which is deprecated, so that i can get the
size of the resulting String.
Is there a method that allow to know the size of a char arrays ?
Any help will be welcome, thanks.JPasswordFieldObj.getPassword().length;the length variable isn't visible in the forte visual parameters.
thanks a lot, it saved me a lot of time and let me keep the
getPassword() secure.
Sorry, don't have more duke dollars, but you should have get some for this. -
How to get the size of the blob file uploaded ?
Hi ,
Is there anyway to get the size of the file i have uploaded to a blob type attribute ?
What i can see is that when we upload a file in contributor UI ,once the file is uploaded successfully and if we hover on it , it will show the filename , type and size of the uploaded file .
From where can we get that details so that we can reuse these details in our code ?
Thanks and Regards,
PraveenA filter is a sensible solution, or you can get it in a roundabout way like this for example if you have the blobid (this is paraphrased from OpenMarket/Gator/AttributeTypes/IMAGEPICKERShowImages.jsp):
<ics:sql sql='<%="select urldata,filevalue from MungoBlobs where id=" + ics.GetVar("blobid")%>' listname="blobdata" table="MungoBlobs" />
<ics:listget listname="blobdata" fieldname="urldata" output="urldata" />
<ics:setvar name="blobpath" value='<%=ics.GetProperty("cc.urlattrpath", "gator.ini", true) + ics.GetVar("urldata")%>' />
<%
File blobFile = new File(ics.GetVar("blobpath"));
long length = blobFile.length();
%>
Phil
Message was edited by: pgleghorn -
How to get the position of a selected cell in a table ?
Hi,
How can I get the position of a selected cell in a table or in a list multicolumn cmd ?
Thanks.Invoke node >>> point to Row Column
Ben
Message Edited by Ben on 07-19-2007 03:14 PM
Ben Rayner
I am currently active on.. MainStream Preppers
Rayner's Ridge is under construction
Attachments:
Point_To_Row_Column.PNG 22 KB
Maybe you are looking for
-
Delete non-picked items in delivery using iDoc
Hello gurus, I'm integrating SAP ECC and external WM solutions using iDocs. The outbound delivery is created in SAP ECC and sent to WMS using DESADV iDoc. The picking is performed in WMS and the list of shipped items with batch numbers are returned t
-
About changes in PI 7.1
Hi experts, I am not sure why few things keep changing all the time in PI in each version. Generally we add more options and enhance existing components. Collaboration profile, collaboration agreements were seen in 7.0, XI has become PI. service wito
-
When I downloaded an app, malware came with it, how can I find it to move it to the trash? I tried to use finder,but ethier I am not using it correct, but its not finding it.
-
Does anyone know what to do if the Ellipsis 7 is stuck on a welcome screen?
My Eliipsis 7 is stuck on a welcome screen (not the Verizon Wireless Welcome Screen) and will not start or shut down. I tried resetting by using a paperclip, but nothing happens. I also can't figure out how to open the thing up to remove the battery
-
Alias support in directory server 5
Hi, Is alias dereferencing supported in Directory Server 5? (It is mentioned in this article that 4.1 did not support it: http://java.sun.com/products/jndi/tutorial/ldap/misc/aliases.html). I am trying to do a search using an alias and it does not se